<?xml version="1.0" encoding="UTF-8"?>

<!--
   xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
   xmlns:bpel="http://schemas.xmlsoap.org/ws/2004/03/business-process/"
   xmlns:bpel="xxx"
-->

<xsl:stylesheet
   version="1.0"
   xmlns:bpel="http://schemas.xmlsoap.org/ws/2004/03/business-process/"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="text"/>

<xsl:template name="indent">
  <xsl:param name="indent" select="0"/>
  <xsl:choose>
    <xsl:when test="$indent &gt; 0">
      <xsl:text>  </xsl:text>
      <xsl:call-template name="indent">
	<xsl:with-param name="indent" select="$indent - 1"/>
      </xsl:call-template>
    </xsl:when>
  </xsl:choose>
</xsl:template>

<xsl:template match="bpel:process">
  <xsl:apply-templates select="bpel:*"/>
</xsl:template>

<xsl:template match="bpel:*">
  <xsl:param name="indent" select="0"/>
  <xsl:apply-templates select="bpel:*">
    <xsl:with-param name="indent" select="$indent"/>
  </xsl:apply-templates>
</xsl:template>

<xsl:template match="bpel:invoke|bpel:reply">
  <xsl:param name="indent" select="0"/>
  <xsl:call-template name="indent">
    <xsl:with-param name="indent" select="$indent"/>
  </xsl:call-template>
  <xsl:text>!</xsl:text>
  <xsl:text>&lt;</xsl:text>
  <xsl:value-of select="@partnerLink"/>
  <xsl:text>#</xsl:text>
  <xsl:value-of select="@operation"/>
  <xsl:text>&gt;
</xsl:text>
</xsl:template>

<xsl:template match="bpel:receive">
  <xsl:param name="indent" select="0"/>
  <xsl:call-template name="indent">
    <xsl:with-param name="indent" select="$indent"/>
  </xsl:call-template>
  <xsl:text>?</xsl:text>
  <xsl:text>&lt;</xsl:text>
  <xsl:value-of select="@partnerLink"/>
  <xsl:text>#</xsl:text>
  <xsl:value-of select="@operation"/>
  <xsl:text>&gt;
</xsl:text>
</xsl:template>

<xsl:template match="bpel:assign|bpel:throw|bpel:wait|bpel:empty|bpel:exit|bpel:rethrow">
  <xsl:param name="indent" select="0"/>
  <xsl:call-template name="indent">
    <xsl:with-param name="indent" select="$indent"/>
  </xsl:call-template>
  <xsl:text>empty
</xsl:text>
</xsl:template>

<!-- sequence -->

<xsl:template match="bpel:sequence">
  <xsl:param name="indent" select="0"/>
  <xsl:call-template name="indent">
    <xsl:with-param name="indent" select="$indent"/>
  </xsl:call-template>
  <xsl:text>sequence {
</xsl:text>
  <xsl:apply-templates select="bpel:*">
    <xsl:with-param name="indent" select="$indent + 1"/>
  </xsl:apply-templates>
  <xsl:call-template name="indent">
    <xsl:with-param name="indent" select="$indent"/>
  </xsl:call-template>
  <xsl:text>}
</xsl:text>
</xsl:template>

<!-- if -->
  
<xsl:template match="bpel:if">
  <xsl:param name="indent" select="0"/>
  <xsl:call-template name="indent">
    <xsl:with-param name="indent" select="$indent"/>
  </xsl:call-template>
  <xsl:text>if {
</xsl:text>
  <xsl:apply-templates select="bpel:*">
    <xsl:with-param name="indent" select="$indent + 1"/>
  </xsl:apply-templates>
  <xsl:call-template name="indent">
    <xsl:with-param name="indent" select="$indent"/>
  </xsl:call-template>
  <xsl:text>}
</xsl:text>
</xsl:template>

<xsl:template match="bpel:elseif|bpel:else|bpel:scope">
  <xsl:param name="indent" select="0"/>
  <xsl:apply-templates select="bpel:*">
    <xsl:with-param name="indent" select="$indent"/>
  </xsl:apply-templates>
</xsl:template>

<xsl:template match="bpel:while">
  <xsl:param name="indent" select="0"/>
  <xsl:call-template name="indent">
    <xsl:with-param name="indent" select="$indent"/>
  </xsl:call-template>
  <xsl:text>while {
</xsl:text>
  <xsl:apply-templates select="bpel:*">
    <xsl:with-param name="indent" select="$indent + 1"/>
  </xsl:apply-templates>
  <xsl:call-template name="indent">
    <xsl:with-param name="indent" select="$indent"/>
  </xsl:call-template>
  <xsl:text>}
</xsl:text>
</xsl:template>

<xsl:template match="bpel:repeatUntil">
  <xsl:param name="indent" select="0"/>
  <xsl:text>repeat {</xsl:text>
  <xsl:apply-templates select="bpel:*"/>
  <xsl:text>}</xsl:text>
</xsl:template>

<xsl:template match="bpel:pick">
  <xsl:param name="indent" select="0"/>
  <xsl:call-template name="indent">
    <xsl:with-param name="indent" select="$indent"/>
  </xsl:call-template>
  <xsl:text>pick {
</xsl:text>
  <xsl:for-each select="bpel:onMessage">
    <xsl:call-template name="indent">
      <xsl:with-param name="indent" select="$indent + 1"/>
    </xsl:call-template>
  <xsl:text>sequence { ?</xsl:text>
  <xsl:text>&lt;</xsl:text>
  <xsl:value-of select="@partnerLink"/>
  <xsl:text>#</xsl:text>
  <xsl:value-of select="@operation"/>
  <xsl:text>&gt;
</xsl:text>
    <xsl:apply-templates select="bpel:*">
      <xsl:with-param name="indent" select="$indent + 2"/>
    </xsl:apply-templates>
    <xsl:call-template name="indent">
      <xsl:with-param name="indent" select="$indent + 1"/>
    </xsl:call-template>
    <xsl:text>}
</xsl:text>
  </xsl:for-each>
  <xsl:call-template name="indent">
    <xsl:with-param name="indent" select="$indent"/>
  </xsl:call-template>
  <xsl:text>}
</xsl:text>
</xsl:template>

<xsl:template match="bpel:flow">
  <xsl:param name="indent" select="0"/>
  <xsl:call-template name="indent">
    <xsl:with-param name="indent" select="$indent"/>
  </xsl:call-template>
  <xsl:text>flow {
</xsl:text>
  <xsl:apply-templates select="bpel:*">
    <xsl:with-param name="indent" select="$indent + 1"/>
  </xsl:apply-templates>
  <xsl:call-template name="indent">
    <xsl:with-param name="indent" select="$indent"/>
  </xsl:call-template>
  <xsl:text>}
</xsl:text>
</xsl:template>

<xsl:template match="bpel:forEach">
  <xsl:param name="indent" select="0"/>
  <xsl:call-template name="indent">
    <xsl:with-param name="indent" select="$indent"/>
  </xsl:call-template>
  <xsl:text>foreach {</xsl:text>
  <xsl:apply-templates select="bpel:*">
    <xsl:with-param name="indent" select="$indent + 1"/>
  </xsl:apply-templates>
  <xsl:call-template name="indent">
    <xsl:with-param name="indent" select="$indent"/>
  </xsl:call-template>
  <xsl:text>}</xsl:text>
</xsl:template>

</xsl:stylesheet>

